package com.libros.model;

import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Sefer Sephirott
 */
public class BDLibros {
    
    private String driver;
    private String url;
    private String user;
    private String clave;
    private Connection con;
    private String errorBDLibros;
    private String query;
    private ResultSet rs;
    private Statement st;
    private String condicion;
    private String mensaje;
    
    public BDLibros(){
        
        driver = "oracle.jdbc.OracleDriver";
        url = "jdbc:oracle:thin:@localhost:1521:XE";
        user = "libro";
        clave = "libro";
    }
    
    public Connection conexion(){
        
        
        try{
            
            Class.forName(driver).newInstance();
            con = DriverManager.getConnection(url, user, clave);
            setErrorBDLibros("");
            return con;
        }
        catch(Exception ex){
            setErrorBDLibros("Error conectando a la BD : "+ ex);
            return null;
        }
    }
    
    public boolean cerrarConexion(){

        try{
            con.close();
            return true;
        }
        catch(Exception ex){
            setErrorBDLibros("Error cerrando conexion a la BD : "+ ex);
            return false;
        }
    }
    
    /**
     * 
     * @param tipo tipo de busqueda
     * @param dato el dato a buscar
     * @return 
     */
    public ResultSet consultaLibros(String tipo, String dato){
        
        condicion = "";

        query = "SELECT LIBRO_ID , LIBRO_TITU, AUTOR_NOMB, EDIT_NOMB, LIBRO_EDIC, TO_CHAR(LIBRO_FEC_PUB,'YYYY') FECHA, LIBRO_VALOR "
                    + "FROM LB_TLIBRO, LB_TAUTOR, LB_TEDITORIAL "
                    + "WHERE LIBRO_AUTOR_ID = AUTOR_ID "
                    + "AND LIBRO_EDIT_ID = EDIT_ID ";
        
        if(tipo.equals("Titulo")){

            condicion = "AND LIBRO_TITU LIKE '%"+dato+"%'";
        }
        if(tipo.equals("Autor")){
            
            condicion = "AND AUTOR_NOMB LIKE '%"+dato+"%'";
        }
        if(tipo.equals("Editorial")){

            condicion = "AND EDIT_NOMB LIKE '%"+dato+"%'";
        }
        
        query = query + condicion;
        
        try {

            st = con.createStatement();
            rs = st.executeQuery(query);
            
            return rs;
            
        } catch (SQLException ex) {
            setErrorBDLibros("Error consultando Libro : "+ ex);
            System.out.println(getErrorBDLibros());
            return null;
        }
    }
    
    public String insertaCliente(String p_nombre, String p_user, String p_pass, String p_dir, int p_tele){
        
        query = "INSERT INTO LB_TUSUARIO  VALUES ((SELECT MAX(USER_ID)+1 FROM LB_TUSUARIO),2,'"+p_nombre+"','"+p_user+"','"+p_pass+"','"+p_dir+"',"+p_tele+")";
        try {
            
            st = con.createStatement();
            st.executeUpdate(query);
            
            return "Cliente Creado correctamente";
            
        } catch (SQLException ex) {
            
            if(ex.toString().contains("unique constraint")){
                return "El Nick '"+p_user+"' ya existe. Favor ingrese uno nuevo.";            
            }
            return "Error Creando Cliente : "+ex;
            
        }
        
    }
    
    public ResultSet autenticar(String pass, String user){
        
        try {
            
            query = "SELECT * FROM LB_TUSUARIO WHERE USER_PASS = '"+pass+"' OR USER_USER = '"+user+"'";
            
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            
                
            if(rs.next()){

                String User = rs.getString("USER_USER");
                String Pass = rs.getString("USER_PASS");
                
                if(User.equals(user) && Pass.equals(pass)){
                    setMensajeBDLibros("Autenticado");
                    return rs;//Usuario Autenticado
                }
                else if(!User.equals(user) || !Pass.equals(pass)){
                    setMensajeBDLibros("Usuario o password incorrecto.");
                    System.out.println("Usuario o password incorrecto.");
                    return null;
                }
                else{
                    setMensajeBDLibros("-1");
                    System.out.println("-1");
                    return null;
                }
            }
            else{
                setMensajeBDLibros("Usuario NO existe.");
                System.out.println("Usuario NO existe.");
                return null;
            }
   
        } catch (SQLException ex) {
            setErrorBDLibros("Error Autenticando " + ex);
            return null;
        }
    }
    
    
    public ResultSet libroParaCarrito(int idLibro){
        
        try{
            
            query = "SELECT LIBRO_ID , LIBRO_TITU, AUTOR_NOMB, EDIT_NOMB, LIBRO_EDIC, TO_CHAR(LIBRO_FEC_PUB,'YYYY') FECHA, LIBRO_VALOR "
                    + "FROM LB_TLIBRO, LB_TAUTOR, LB_TEDITORIAL "
                    + "WHERE LIBRO_AUTOR_ID = AUTOR_ID "
                    + "AND LIBRO_EDIT_ID = EDIT_ID "
                    + "AND LIBRO_ID = "+idLibro+"";
            
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            return rs;
            
        }catch(Exception ex){
            
            setErrorBDLibros(""+ex);
            return null;
        }
    }
    /**
     * 
     * @return 
     */
    public String getErrorBDLibros() {
        return errorBDLibros;
    }
    
    /**
     * 
     * @param error 
     */
    public void setErrorBDLibros(String error) {
        this.errorBDLibros = error;
    }

    public String getMensajeBDLibros() {
        return mensaje;
    }

    public void setMensajeBDLibros(String mensaje) {
        this.mensaje = mensaje;
    }
    
    
}
